import {Plugin, ResolvedConfig} from 'vite';
import path from "path"

const pathSrc = path.resolve(__dirname, "../src/pages").replace(/\\/g, '/');

// 虚拟模块名称
const ModuleId = 'OneCodePlugin';

export default function OneCodePlugin(): Plugin {
    let config: ResolvedConfig | null = null;
    return {
        name: ModuleId,
        async transform(code, id) {
            // 如果 id 是 design.js 结尾
            if (id.endsWith('design.js')) {
                // 将 pathSrc 全部 \ 转换为 / ，并且将 id 中的 pathSrc 去掉
                const relPath = id.replace(/\\/g, '/').replace(pathSrc, '')

                if (code.startsWith('export default {')) {
                    // 在 export default { 之后，插入当前模块路径
                    code = code.replace('export default {', `
import.meta.hot?.accept((newModel) => {
    if(typeof window['designJsHotAccept'] === 'function') {
        window['designJsHotAccept'](newModel)
    }
})
export default { 
    _filePath: '${relPath}',`)
                }
                // console.log('plugin load ' + id, pathSrc, relPath)
            }

            return code
        },
    }
}
